/**
 * 
 */
package co.com.sed.model.peers;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import co.com.sed.model.beans.EvaluacionEVC;
import co.com.sed.model.beans.Evaluacion360;
import co.com.sed.model.beans.ResultadoGen;
import co.com.sed.model.util.Util;

/**
 * @author Mejia
 *
 */
public class ResultadoGenPeer {

	private static final String BUSCAR_RESULTADOSGEN =
		"SELECT id_resul_g, resultado_g, resultado_360, resultado_evc, observacion FROM resultado_g";
	
	private static final String BUSCAR_RESULTADOGEN_POR_EVALUACION360 =
		"SELECT id_resul_g, resultado_g, resultado_360, resultado_evc, observacion FROM resultado_g"+
		"WHERE id_evaluacion_360 = &resultado360";

	private static final String BUSCAR_RESULTADOGEN  =	
		"SELECT id_resul_g, resultado_g, resultado_360, resultado_evc, observacion FROM resultado_g"+
		"WHERE id_resul_g = &id_resul_g";

	private static final String INSERTAR_RESULTADOGEN  =
		"INSERT INTO resultado_g(resultado_g, resultado_360, resultado_evc, observacion ) VALUES "+
		"(resultado_g, resultado_360, resultado_evc, observacion )";

	private static final String ACTUALIZAR_RESULTADOGEN =
		"UPDATE resultado_g "+
		"SET resultado_g = &resultado_g , resultado_360 = &resultado_360 , resultado_evc = '&resultado_evc', observacion = &observacion "+
		"WHERE id_resul_g = &id_resul_g";

	private static final String ELIMINAR_RESULTADOGEN =
		"DELETE FROM resultado_g "+
		"WHERE id_resul_g = &id_resul_g";

	
	/**
	 *  busca en la base de datos todos los registros de la tabla "resultado_g"
	 * 
	 * @param stmt			referencia al Statement, pasado por DataManager para realizar la consulta
	 * 
	 * @return				lista de resultado_g
	 * @see         		ResultadoGen, Statement
	 */
	
	public static ArrayList<ResultadoGen> buscarTodosResultadoGen(Statement stmt) {
		ArrayList<ResultadoGen> resultadosGen = new ArrayList<ResultadoGen>();

		String sql = BUSCAR_RESULTADOSGEN; //"SELECT id_resul_g, resultado_g, resultado_360, resultado_evc, observacion FROM resultado_g";

		ResultSet rs;
		try {
			rs = stmt.executeQuery(sql);
			try {
				while (rs.next()) {
					ResultadoGen reg = new ResultadoGen();

					reg.setIdResultadoGen(rs.getInt("id_resul_g"));
					reg.setResultadoGen(rs.getFloat("resultado_g"));
					reg.setObservacion(rs.getString("observacion"));
					reg.setResultado360(new Evaluacion360(rs.getInt("resultado_360")));
					reg.setResultadoEVC(new EvaluacionEVC (rs.getInt("resultado_evc")));
					
					
					
					resultadosGen.add(reg);
				}
			} finally {
				rs.close();
			}
		} catch (SQLException e) {
			Util.print("No es posible consultar la base de datos:"
					+ e.getMessage());
			e.printStackTrace();
		}

		return resultadosGen;
	}
	
	/**
	 *  busca en la base de datos todos los registros de la tabla "resultado_g" que pertenezcan a evaluacion360
	 * 
	 * @param stmt			referencia al Statement, pasado por DataManager para realizar la consulta
	 * 
	 * @return				lista de resultado_g
	 * @see         		ResultadoGen, Statement
	 */
	
	public static ArrayList<ResultadoGen> buscarResultadosGenPorEvaluacion360(Statement stmt, int idEvaluacion360) {
		ArrayList<ResultadoGen> resultadosGen = new ArrayList<ResultadoGen>();

		String sql = BUSCAR_RESULTADOGEN_POR_EVALUACION360; //"SELECT id_resul_g, resultado_g, resultado_360, resultado_evc, observacion FROM resultado_g";

		// se setean los "parametros"
		sql = sql.replaceAll("&resultado360", "" + idEvaluacion360);
		
		ResultSet rs;
		try {
			rs = stmt.executeQuery(sql);
			try {
				while (rs.next()) {
					ResultadoGen reg = new ResultadoGen();

					reg.setIdResultadoGen(rs.getInt("id_resul_g"));
					reg.setResultadoGen(rs.getFloat("resultado_g"));
					reg.setObservacion(rs.getString("observacion"));
					reg.setResultado360(new Evaluacion360(rs.getInt("resultado_360")));
					reg.setResultadoEVC(new EvaluacionEVC (rs.getInt("resultado_evc")));
					
					
					
					resultadosGen.add(reg);
				}
			} finally {
				rs.close();
			}
		} catch (SQLException e) {
			Util.print("No es posible consultar la base de datos:"
					+ e.getMessage());
			e.printStackTrace();
		}

		return resultadosGen;
	}
	
	/**
	 *  busca en la base de datos un registro de la tabla "resultado_g"
	 * 
	 * @param stmt				referencia al Statement, pasado por DataManager para realizar la consulta
	 * @param idResultadoGen	id de la resultado_g que se desea cosultar
	 * 
	 * @return					resultado_g buscada
	 * @see         			ResultadoGen, Statement
	 */
	
	public static ResultadoGen buscarResultadoGen(Statement stmt, int idResultadoGen) {
		ResultadoGen resultado_g = new ResultadoGen();

		String sql = BUSCAR_RESULTADOGEN;
		//"SELECT id_resul_g, resultado_evc, rango FROM resultado_g "+
		//"WHERE id_resul_g = &id_resul_g";
		
		
		// se setean los "parametros"
		sql = sql.replaceAll("&id_resul_g", String.valueOf(idResultadoGen));
		
		ResultSet rs;
		try {
			rs = stmt.executeQuery(sql);
			try {
				if (rs.next()) {
									
					resultado_g.setIdResultadoGen(rs.getInt("id_resul_g"));
					resultado_g.setResultadoGen(rs.getFloat("resultado_g"));
					resultado_g.setObservacion(rs.getString("observacion"));
					resultado_g.setResultado360(new Evaluacion360(rs.getInt("resultado_360")));
					resultado_g.setResultadoEVC(new EvaluacionEVC (rs.getInt("resultado_evc")));
										
				}
			} finally {
				rs.close();
			}
		} catch (SQLException e) {
			Util.print("No es posible consultar la base de datos:" + e.getMessage());
			e.printStackTrace();
		}

		return resultado_g;
	}
	
	/**
	 *  Inserta una ResultadoGen en la base de datos
	 * 
	 * @param stmt				referencia al Statement, pasado por DataManager para ejecutar la sentencia
	 * @param resultado_g		resultado_g que se va a insertar en la base de datos
	 *  
	 * @return					void
	 * @throws SQLException		si ocurre un error al insertar el registro en la base de datos
	 * 
	 * @see         			DataManager
	 */
	
	public static int insertarResultadoGen(Statement stmt, ResultadoGen resultadoGen) throws SQLException {
		int idNuevaResultadoGen = -1;
		ResultSet rs = null;
		
		try {
			String sql = INSERTAR_RESULTADOGEN;
			 //se setean los "parametros": &id_calificacion, &cualitativa, &cuantitativa, &descripcion 
			sql = sql.replaceAll("&resultado_g", "" + resultadoGen.getResultadoGen())
					 .replaceAll("&observacion", "" + resultadoGen.getObservacion())
					 .replaceAll("&resultado_360", "" + resultadoGen.getResultado360())
			         .replaceAll("&resultado_evc", "" + resultadoGen.getResultadoEVC());
			
			stmt.executeUpdate(sql,Statement.RETURN_GENERATED_KEYS);
			
			rs = stmt.getGeneratedKeys();
			if (rs.next()) {
				idNuevaResultadoGen = rs.getInt("id_resul_g");
				Util.print("nuevo registro: " + idNuevaResultadoGen);
			}
		} finally {
			rs.close();
		}
		
		return idNuevaResultadoGen;
	}
		
	

	/**
	 *  Actualiza una resultado_g en la base de datos
	 * 
	 * @param stmt				referencia al Statement, pasado por DataManager para ejecutar la sentencia
	 * @param resultado_g			resultado_g que se va a actualizar en la base de datos
	 * 
	 * @return					void
	 * @throws SQLException		si ocurre un error al actualizar el registro en la base de datos
	 * 
	 * @see         			DataManager
	 */
	
	public static void actualizarResultadoGen(Statement stmt, ResultadoGen resultado_g) throws SQLException {
		String sql = ACTUALIZAR_RESULTADOGEN;
		 //se setean los "parametros": &id_resul_g, &resultado_evc
		sql = sql.replaceAll("&id_resul_g", "" + resultado_g.getIdResultadoGen())
				 .replaceAll("&resultado_g", "" + resultado_g.getResultadoGen())
				 .replaceAll("&observacion", "" + resultado_g.getObservacion())
				 .replaceAll("&resultado_360", "" + resultado_g.getResultado360())
		         .replaceAll("&resultado_evc", "" + resultado_g.getResultadoEVC());
		
		stmt.executeUpdate(sql);
	}
	
	/**
	 *  Elimina un Resultado en la base de datos
	 * 
	 * @param stmt				referencia al Statement, pasado por DataManager para ejecutar la sentencia
	 * @param Resultado_g		resultado_g que se va a eliminar en la base de datos
	 * 
	 * @return					void
	 * @throws SQLException		si ocurre un error al eliminar el registro en la base de datos
	 * 
	 * @see         			DataManager
	 */
	
	public static void eliminarResultadoGen(Statement stmt, ResultadoGen resultado_g) throws SQLException {
		String sql = ELIMINAR_RESULTADOGEN;
		// se setean los "id_resul_g = &id_resul_g";
		sql = sql.replaceAll("&id_resul_g", "" + resultado_g.getIdResultadoGen());

		stmt.executeUpdate(sql);
	}
	
}
